package org.opens.netty.chatServer.server.session;

import io.netty.channel.Channel;

import java.util.List;
import java.util.Set;

/**
 * 聊天组会话管理接口
 */
public interface GroupSession {

    /**
     * 创建一个聊天组, 如果不存在才能创建成功, 否则返回null
     * @param name      组名
     * @param members   成员
     * @return  成功时返回组对象, 失败时返回null
     */
    Group createGroup(String name, Set<String> members);

    /**
     * 加入聊天组
     * @param name      组名
     * @param member    成员名
     * @return  如果组不存在返回null, 否则返回组对象
     */
    Group joinMember(String name, String member);

    /**
     * 移除组中的成员
     * @param name      组名
     * @param member    成员名
     * @return  如果组不存在则返回null, 否则返回组对象
     */
    Group removeMember(String name, String member);

    /**
     * 移除聊天组
     * @param name  组名
     * @return  如果组不存在返回null, 否则返回组对象
     */
    Group removeGroup(String name);

    /**
     * 获取组中成员
     * @param name  组名
     * @return  成员集合, 没有成员时返回空的set
     */
    Set<String> getMembers(String name);

    /**
     * 获取组中成员的channel集合, 只有在线的channel才会返回
     * @param name  组名
     * @return  成员channel集合
     */
    List<Channel> getMembersChannel(String name);

}
